איך לקחת ערך(string) , להציג רק תאות הראשונה ותאחרונה באמצע להחליף את כל האותיות ל * ?

עד כה הגעצי לזה :
$str = strtok($result['useremail'],'@');
                 $str =  str_repeat ('*', strlen ($str));


נגיד והערך ככה :

[email protected]
זה יגיע לזה :
example
ואז ב- str_repeat הוא יחליף את הכל ל Password symbol (*) :
*********

אבל אני רוצה שהוא יציג את האות הראשונה והאחרונה ככה :
e******[email protected]
משהו יודע ?

6 תשובות

avatar ענה Cayce ב 25 לנובמבר 2013 #

$str = "asdf";

$first = $str[0];
$last  = $str[strlen($str)-1];

$str =  $first . str_repeat ('*', strlen ($str) -2) . $last;

echo $str; // prints a**f

avatar ענה ravgrg ב 25 לנובמבר 2013 #

סבבה יותר טוב אבל נתקעתי ככה :

$str = explode("@", $result['useremail']);
                 $str = $str[0];
         $str1 = $str[1];
                 
         $first = $str[0];
                 $last  = $str[strlen($str)-1];
                 $str =  $first . str_repeat ('*', strlen ($str) -2) . $last.$str1;


אני רוצה לקחת את הערך שבמקרה זה :
[email protected]
לחתוך אותו לשניים:
example
@gmail.com
ולקחת את האות הראשונה והאחרונה של ה- example ובאמצע לשים * ואז בסוף את הכל להכניס למשתנה אחד:
e****[email protected]
אתה יכול לכוון אותי ?

avatar ענה Cayce ב 25 לנובמבר 2013 #

תשים לב, פה:

$str = $str[0];
$str1 = $str[1];

אתה לא באמת שומר את החלק השני של המייל. כי בשורה הראשונה אתה "דורס" את המערך.
תתן שם אחר למשתנה(בשורה הראשונה).
ובסוף אל תשכח להוסיף את השטרודל.

avatar ענה ravgrg ב 25 לנובמבר 2013 #

וואלה לא הבנתי..

הינה שינתי לזה :

$string = explode("@", $result['useremail']);
                 
         $str = $string[0];
         
                 $str1 = $string[1];
       
         $first = $str[0];
                 $last  = $str[strlen($str)-1];
                 $return =  $first . str_repeat ('*', strlen ($str) -2) . $last.'@'.$str1;


ועדין לא עובד :
Warning: str_repeat(): Second argument has to be greater than or equal to 0

avatar ענה ravgrg ב 25 לנובמבר 2013 #

טוב הסתדרתי תודה

avatar ענה Michael ב 25 לנובמבר 2013 #

או פיתרון יותר פשוט:

$email = '[email protected]';

$pos = strrpos($email, '@') - 2;
echo substr_replace($email, str_repeat('*', $pos), 1, $pos);


דיסקליימר: לא בדקתי, 100% שלא יעבוד עם אימייל של אות אחת, לא יצנזר מייל עם שתי אותיות. gl